/**
 * 
 */
package aei

import hce.core.composition.* // Composition y EventContext
import hce.HceService
import aei.AeiService

/**
 * @author Pablo Pazos Gutierrez (pablo.swp@gmail.com)
 *
 */
class StudySearchResultController {

    def scaffold = aei.StudySearchResult
    
    def hceService
    def aeiService
    
    def list = {

        def composition = Composition.get( session.traumaContext.episodioId ) // tiene que estar el episodioId en sesion porque solo con un episodio seleccionado podria estar llamando a esta accion.
        def partySelf = hceService.getPartySelfFromComposition( composition )
        
        def studies = []
        if (partySelf)
        {
            studies = StudySearchResult.withCriteria {
                eq('patientId', partySelf.externalRef.objectId.value) // Asumo que el partySelf SIEMPRE tiene externalRef.objectId.value !
            }
        }
        
        // FIXME: esta tira una except si hay mas de un pac con el mismo id, hacer catch
        def patient = hceService.getPatientFromComposition( composition )

       // Secciones predefinidas para seleccionar registro clinico
        def sections = []
        grailsApplication.config.hce.emergencia.sections.trauma.keySet().each { sectionPrefix ->
            sections << sectionPrefix
        }

        return [studies:   studies,
                episodeId: session.traumaContext?.episodioId,
                patient:   patient,
                sections:  sections, // necesario para el menu
                allSubsections: grailsApplication.config.hce.emergencia.sections.trauma, // Mapa nombre seccion -> lista de subsecciones
                userId:    session.traumaContext.userId]
    }
    
    /**
    def studySeries = {
        
        def sresult = StudySearchResult.get( params.id )

        def composition = Composition.get( session.traumaContext.episodioId ) // tiene que estar el episodioId en sesion porque solo con un episodio seleccionado podria estar llamando a esta accion.
        def partySelf = hceService.getPartySelfFromComposition( composition )

        def results = []
        
        try {
            results = aeiService.sendDICOMQuery3(
                        sresult.source,
                        sresult.studyId,
                        null, // studyUID
                        null ) // studyDate
        } catch (Exception e) {
            flash.message = "studySearchResult.error.pacsComm"
        }

        def patient = hceService.getPatientFromComposition( composition )

       // Secciones predefinidas para seleccionar registro clinico
        def sections = []
        grailsApplication.config.hce.emergencia.sections.trauma.keySet().each { sectionPrefix ->
            sections << sectionPrefix
        }

        return [sresult:sresult,
                results: results,
                episodeId: session.traumaContext?.episodioId,
                patient: patient,
                sections: sections, // necesario para el menu
                allSubsections: grailsApplication.config.hce.emergencia.sections.trauma, // Mapa nombre seccion -> lista de subsecciones
                userId: session.traumaContext.userId]
    }
    */
    
    def studySeries2 = {

        def composition = Composition.get( session.traumaContext.episodioId ) // tiene que estar el episodioId en sesion porque solo con un episodio seleccionado podria estar llamando a esta accion.
        def partySelf = hceService.getPartySelfFromComposition( composition )

        def selectedStudy = StudySearchResult.get( params.id )
        // El estudio seleccionado tiene las series adentro.
		
        def studies = []
        if (partySelf)
        {
            studies = StudySearchResult.withCriteria {
                eq('patientId', partySelf.externalRef.objectId.value) // Asumo que el partySelf SIEMPRE tiene externalRef.objectId.value !
            }
        }
        
        // FIXME: esta tira una except si hay mas de un pac con el mismo id, hacer catch
        def patient = hceService.getPatientFromComposition( composition )
        
        // Secciones predefinidas para seleccionar registro clinico
        def sections = []
        grailsApplication.config.hce.emergencia.sections.trauma.keySet().each { sectionPrefix ->
            sections << sectionPrefix
        }
        
        return [studies: studies,
                selectedStudy: selectedStudy,
                episodeId: session.traumaContext?.episodioId,
                patient: patient,
                sections: sections, // necesario para el menu
                allSubsections: grailsApplication.config.hce.emergencia.sections.trauma, // Mapa nombre seccion -> lista de subsecciones
                userId: session.traumaContext.userId]
        
    } // studySeries2
    
    /**
    def seriesImages = {
        
        def sresult = StudySearchResult.get( params.id )
        
        def composition = Composition.get( session.traumaContext.episodioId ) // tiene que estar el episodioId en sesion porque solo con un episodio seleccionado podria estar llamando a esta accion.
        def partySelf = hceService.getPartySelfFromComposition( composition )
        
        def results = []
        
        try {
            results = aeiService.sendDICOMQuery4( sresult.source, params.uid )
        } catch (Exception e) {
            flash.message = "studySearchResult.error.pacsComm"
        }

        def patient = hceService.getPatientFromComposition( composition )

        // Secciones predefinidas para seleccionar registro clinico
        def sections = []
        grailsApplication.config.hce.emergencia.sections.trauma.keySet().each { sectionPrefix ->
            sections << sectionPrefix
        }
        
// TODO: mostrar info de la serie!

        return [sresult:sresult,
                results: results,
                episodeId: session.traumaContext?.episodioId,
                patient: patient,
                sections: sections, // necesario para el menu
                allSubsections: grailsApplication.config.hce.emergencia.sections.trauma, // Mapa nombre seccion -> lista de subsecciones
                userId: session.traumaContext.userId,
                reg: sresult.source]
    }
    */
    
    def seriesImages2 = {
        
        def composition = Composition.get( session.traumaContext.episodioId ) // tiene que estar el episodioId en sesion porque solo con un episodio seleccionado podria estar llamando a esta accion.
        def partySelf = hceService.getPartySelfFromComposition( composition )

        def selectedStudy = StudySearchResult.get( params.id )
        def selectedSerie = SeriesSearchResult.get( params.serieId )

		
		println "=== seriesImages2 ==="
		println "=== selectedStudy: " + selectedStudy
		println "=== selectedSerie: " + selectedSerie
		println ""
		
        def studies = []
        if (partySelf)
        {
            studies = StudySearchResult.withCriteria {
                eq('patientId', partySelf.externalRef.objectId.value) // Asumo que el partySelf SIEMPRE tiene externalRef.objectId.value !
            }
        }
        
        // imagenes y reportes
        def objects = []
        try
        {
            //objects = aeiService.sendDICOMQuery4( selectedStudy.source, params.uid )
			objects = aeiService.sendDICOMQuery4( selectedStudy.source,
                                                  selectedSerie.studyUID, // Se agrega para consulta en COMEPA, MACIEL y ClearCanvas Server andan sin este parametro.
                                                  selectedSerie.serieUID )
        }
        catch (Exception e)
        {
            flash.message = "studySearchResult.error.pacsComm"
			println "======AAAA====="
			println e.getMessage()
			println "======AAAA====="
        }
    
        // FIXME: esta tira una except si hay mas de un pac con el mismo id, hacer catch
        def patient = hceService.getPatientFromComposition( composition )
        
        // Secciones predefinidas para seleccionar registro clinico
        def sections = []
        grailsApplication.config.hce.emergencia.sections.trauma.keySet().each { sectionPrefix ->
            sections << sectionPrefix
        }
        
        // TODO: mostrar info de la serie!
        
        return [selectedStudy:  selectedStudy,
                selectedSerie: selectedSerie,
                studies:        studies,
                objects:        objects,
                episodeId:      session.traumaContext?.episodioId,
                patient:        patient,
                sections:       sections, // necesario para el menu
                allSubsections: grailsApplication.config.hce.emergencia.sections.trauma, // Mapa nombre seccion -> lista de subsecciones
                userId:         session.traumaContext.userId,
                reg:            selectedStudy.source]
        
    } // seriesImages2
}
